package com.hzit.pay.center.service.impl;

import cn.hutool.core.lang.Snowflake;
import com.hzit.pay.center.mapper.PaySerialNoInfoMapper;
import com.hzit.pay.center.model.PaySerialNoInfo;
import com.hzit.pay.center.service.IPaySerialNoService;
import com.pay.center.common.enums.PayStatusEnum;
import com.pay.center.common.req.PaymentReq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Service
public class PaySerialNoServiceImpl implements IPaySerialNoService {

    @Autowired
    private PaySerialNoInfoMapper paySerialNoInfoMapper;

    @Override
    public PaySerialNoInfo createPaySerialNo(PaymentReq paymentReq) {

        String orderAmt = paymentReq.getOrderAmount();


        PaySerialNoInfo paySerialNoInfo = new PaySerialNoInfo();

        //雪花算法
        Snowflake snowflake = new Snowflake(1,1);
        String paySerialNumber = snowflake.nextIdStr() + ""; //加自增id
        paySerialNoInfo.setPaySerialNumber(paySerialNumber); //支付流水号 uuid, 时间戳，雪花算法（服务器回退可能导致重复）？

        paySerialNoInfo.setGoodsDesc(paymentReq.getGoodsDesc());

        if (!StringUtils.isEmpty(paymentReq.getGoodsDetail())){
            paySerialNoInfo.setGoodsDetail(paymentReq.getGoodsDetail().toString());
        }
        paySerialNoInfo.setIsDel("N"); //TOD 枚举
        paySerialNoInfo.setPayChannel(paymentReq.getPayChannel());
        paySerialNoInfo.setPayMethod(paymentReq.getPayMethod());

        paySerialNoInfo.setPayStatus(PayStatusEnum.UNPAY.getCode());

        paySerialNoInfo.setOrderId(paymentReq.getOrderId());
        paySerialNoInfo.setOrderDesc(paymentReq.getOrderDesc());
        Date nowDate = new Date();
        paySerialNoInfo.setCreateTime(nowDate);
        paySerialNoInfo.setCreateBy("system");
        BigDecimal bigDecimal = new BigDecimal(orderAmt);
        paySerialNoInfo.setPayAmount(bigDecimal);

        paySerialNoInfoMapper.insertSelective(paySerialNoInfo);

        return paySerialNoInfo;

    }

    @Override
    public List<PaySerialNoInfo> queryByOrderId(String orderId) {

        List<PaySerialNoInfo> infoList = paySerialNoInfoMapper.selectByOrderId(orderId);

        return infoList;
    }

    @Override
    public PaySerialNoInfo queryBySerialNo(String paySerialNo) {
        return  paySerialNoInfoMapper.selectBySerialNo(paySerialNo);
    }

    @Override
    public void updateSerialNoStatus(PaySerialNoInfo paySerialNoInfo) {
        paySerialNoInfoMapper.updateByPrimaryKeySelective(paySerialNoInfo);

    }

    @Override
    public List<PaySerialNoInfo> queryUnPayList() {
        return null;
    }


}
